#include <iostream>
#include <vector>
#include <algorithm>

// 方法1：使用栈结构（先入后出）
void traverse_digits_descending_stack(int num) {
    std::cout << "Digits (descending): ";
    
    if (num == 0) {
        std::cout << "0" << std::endl;
        return;
    }
    
    if (num < 0) {
        std::cout << "- ";
        num = -num;
    }
    
    std::vector<int> stack;
    while (num > 0) {
        stack.push_back(num % 10);
        num /= 10;
    }
    
    // 从后往前输出（正序）
    for (int i = stack.size() - 1; i >= 0; i--) {
        std::cout << stack[i] << " ";
    }
    std::cout << std::endl;
}

// 方法2：反转顺序
std::vector<int> get_digits_descending(int num) {
    std::vector<int> digits;
    
    if (num == 0) {
        digits.push_back(0);
        return digits;
    }
    
    if (num < 0) {
        num = -num;
    }
    
    // 从低位到高位提取
    while (num > 0) {
        digits.push_back(num % 10);
        num /= 10;
    }
    
    // 反转得到正序
    std::reverse(digits.begin(), digits.end());
    
    return digits;
}

// 方法3：直接遍历（不反转）
std::vector<int> get_digits_raw_descending(int num) {
    std::vector<int> digits;
    
    if (num == 0) {
        digits.push_back(0);
        return digits;
    }
    
    if (num < 0) {
        num = -num;
    }
    
    // 从低位到高位提取（保持倒序）
    while (num > 0) {
        digits.push_back(num % 10);
        num /= 10;
    }
    
    return digits;  // 返回: [个位, 十位, 百位, ...]
}

// 使用示例
int main() {
    int num = 12345;
    
    traverse_digits_descending_stack(num);  // 输出: Digits (descending): 1 2 3 4 5
    
    std::vector<int> digits1 = get_digits_descending(num);
    std::cout << "Digits (ascending): ";
    for (int d : digits1) {
        std::cout << d << " ";
    }
    std::cout << std::endl;  // 输出: 1 2 3 4 5
    
    std::vector<int> digits2 = get_digits_raw_descending(num);
    std::cout << "Digits (descending): ";
    for (int d : digits2) {
        std::cout << d << " ";
    }
    std::cout << std::endl;  // 输出: 5 4 3 2 1
    
    return 0;
}